perm filename MEMO.PUB[HAL,HE]3 blob sn#127018 filedate 1974-10-29 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	.FIGS←TRUE
C00010 00003	.IF XCRIBL THEN FONT 1 "BASL30"
C00012 00004	.NEXT PAGE
C00015 00005	.ADJUST COMPACT
C00016 00006	.REQUIRE "MINTRO.PUB" SOURCE_FILE <<MEMO25(2) Introduction>>
C00019 00007	.PORTION CONTENTS
C00022 ENDMK
C⊗;
.FIGS←TRUE;
.STD_SPREAD ← 1;

.<<PUB STATEMENTS>>

.TURN ON "∞π↑↓[]{_α#←→&∂";
.TURN OFF TAB;
.STD_PREFACE← 2*STD_SPREAD - 1;
.SPREAD ← STD_SPREAD ;
.PREFACE STD_PREFACE ;
.NOFILL; PREFACE SPREAD-1; FILL;

.MACRO UNFILL ⊂BEGIN NOFILL;PREFACE SPREAD-1;SKIP 2-SPREAD;GROUP⊃;
.MACRO MATRIX ⊂BEGIN NOFILL PREFACE 0 SKIP SPREAD GROUP⊃
.MACRO REFILL ⊂END; SKIP 2-SPREAD; CONTINUE⊃;
.MACRO MAYBREAK ⊂APART;GROUP;⊃;
.MACRO BULL ⊂ONCE; FLUSH LEFT⊃;
.MACRO REPART ⊂END; SKIP 2-SPREAD; APART⊃;
.MACRO COMT(X) ⊂BEGIN FILL;INDENT X,X;PREFACE 0;}%4{⊃

.MACRO CEIL(X); ⊂("GINT(X)")⊃;
.MACRO THETA ⊂"O∂-1-"⊃;
.MACRO PHI ⊂"O∂-1|"⊃
.MACRO SIGMA ⊂"~"⊃;
.MACRO INTEGRAL ⊂"%2α~%*"⊃;
.MACRO PLUSMINUS ⊂"∩"⊃;
.MACRO DEL ⊂"@"⊃
.MACRO TAU ⊂"λ"⊃;

.COUNT SECTION FROM 1 TO 99 PRINTING ⊂SECTION⊃;
.COUNT SUBSEC FROM 0 TO 9 IN SECTION PRINTING "!.1";
.COUNT SUBSUBSEC FROM 0 TO 99 IN SUBSEC PRINTING "!.1";
.COUNT FOOTNOTE INLINE FROM 1 TO 9 IN PAGE;

.MACRO NEWSEC(TITLE,ID,STARS) ⊂
.NEXT SECTION!;
.IF PICLIN≠NULL THEN ALLPIC;
.SECNAME←NULL;
.SSECNAME←NULL;
.SSSNUM←NULL
.NEXT SUBSEC;FIGURE←0;TABLE←0;
.SECNAME←"TITLE";
.SSECNAME←"ID";
.SKIP TO COLUMN 1; BEGIN CENTER;
%5{SECID} {SECTION!}%*
%6{SECNAME}%*
.END
.FILLER←"STARS"; IF FILLER=NULL THEN FILLER←" ";
.SEND CONTENTS ⊂IF LINES<3*SPREAD+1 THEN
.BEGIN 
.NEXT PAGE
{SECID}→PAGE
.END

{SECTION!}{FILLER} TITLE →{PAGE!}
.⊃
.IF "STARS"=NULL THEN SECNAME←"TITLE" ELSE SECNAME←"STARS";⊃



.MACRO NEWSS(TITLE,ID,LAB,STARS) ⊂
.NEXT SUBSEC!;
.IF PICLIN≠NULL THEN ALLPIC;
.SSSNUM←SUBSEC!
.NEXT SUBSUBSEC;
.IF LINES≤10*SPREAD THEN NEXT PAGE ELSE SKIP 4*SPREAD;
.SSECNAME←"ID";
.IF SSECNAME=NULL THEN SSECNAME←"TITLE";
%5{SUBSEC!}      TITLE%*
.FILLER←"STARS"; IF FILLER=NULL THEN FILLER←" ";
.SEND CONTENTS ⊂IF LINES<3*SPREAD+1 THEN
.BEGIN 
.NEXT PAGE
{SECID}→PAGE
.END
    {SUBSEC!}{FILLER} TITLE →{PAGE!}
.⊃
.⊃

.MACRO NEWSSS(TITLE,LAB,STARS) ⊂
.NEXT SUBSUBSEC!;
.SSSNUM←SUBSUBSEC!
.IF LINES≤8*SPREAD THEN NEXT PAGE ELSE SKIP 2*SPREAD;
%4{SUBSUBSEC!}     TITLE%*
.BREAK
.FILLER←"STARS"; IF FILLER=NULL THEN FILLER←" ";
.SEND CONTENTS ⊂IF LINES<3*SPREAD+1 THEN
.BEGIN 
.NEXT PAGE
{SECID}→PAGE
.END
	{SUBSUBSEC!}{FILLER} TITLE →{PAGE!}
.⊃
.⊃


.COUNT EQUATION INLINE IN SECTION PRINTING "!.1"

.MACRO NEWEQ⊂
.NEXT EQUATION!;"→[Eq. ";EQUATION!;"]"⊃

.MACRO EQREF(LBL)⊂"Equation ";EQUATION! LBL⊃
.MACRO SECREF(LBL)⊂"Chapter ";SECTION! LBL⊃
.MACRO SSREF(LBL)⊂"Section ";SUBSEC! LBL⊃
.MACRO SSSREF(LBL)⊂"subsection ";SUBSUBSEC! LBL⊃
.MACRO FIGREF(LBL)⊂"Figure ";FIGURE   LBL⊃
.MACRO TABREF(LBL)⊂"Table "; LBL⊃
.AT NULL ⊂IF FILLING THEN
.    START BREAK;
.    IF LINES<2*SPREAD+1 THEN NEXT PAGE END
.  ELSE SKIP SPREAD⊃;

.RECURSIVE MACRO STOREPIC(TITLE,LINES,TEMP) ⊂START
.PICLIN←PICLIN&"  "[1 TO 2-LENGTH("LINES")]&"LINES";
.PICNUM←PICNUM&"    "[1 TO 4-LENGTH(TEMP)]&TEMP;
.PICTLEN←PICTLEN&"  "[1 TO 2-LENGTH(LENGTH("TITLE"))]&LENGTH("TITLE");
.PICTIT←PICTIT&"TITLE";
.END⊃

.MACRO NEWFIG(TITLE,εLINES,LABEL) ⊂
.FIGURE←FIGURE+1; LABEL TEMP←SECTION&"."&FIGURE; }Figure {TEMP;
.STOREPIC(|TITLE|,LINES,TEMP) ⊃;

.MACRO MAKEFIG(TITLE,εLINES,LABEL) ⊂
.FIGURE←FIGURE+1;LABEL TEMP←SECTION&"."&FIGURE;
.STOREPIC(|TITLE|,LINES,TEMP) ⊃;

.PICLIN←PICNUM←PICTLEN←PICTIT←NULL
.MACRO SMALLPIC⊂⊃
.MACRO ALLPIC⊂⊃

.MACRO NEWTABLE(TITLE,LABEL)⊂
.TABLE←TABLE+1; LABEL TEMP←SECTION&"."&TABLE;
.BEGIN NOFILL CENTER GROUP

Table {TEMP}

TITLE
.⊃;

.IF FIGS THEN START

.MACRO PLACEPIC ⊂BEGIN CENTER PREFACE SPREAD-1
.A←PICLIN[1 TO 2]; B←PICNUM[1 TO 4];
.C←PICTLEN[1 TO 2]; D←PICTIT[1 TO C];
.PICLIN←PICLIN[3 TO ∞]; PICNUM←PICNUM[5 TO ∞];
.PICTLEN←PICTLEN[3 TO ∞]; PICTIT←PICTIT[C+1 TO ∞];
.GROUP SKIP A;
Figure {B}
{D}
.SKIP 2*SPREAD;
.END⊃

.RECURSIVE MACRO RSPIC ⊂
.IF LINES-3*SPREAD≥PICLIN[1 TO 2] THEN PLACEPIC
.ELSE START
.	TLIN←TLIN&PICLIN[1 TO 2]; PICLIN←PICLIN[3 TO ∞];
.	TNUM←TNUM&PICNUM[1 TO 4]; PICNUM←PICNUM[5 TO ∞];
.	C←PICTLEN[1 TO 2];
.	TTLEN←TTLEN&C; PICTLEN←PICTLEN[3 TO ∞];
.	TTIT←TTIT&PICTIT[1 TO C]; PICTIT←PICTIT[C+1 TO ∞];
.	END;
.IF PICLIN≠NULL THEN RSPIC⊃

.RECURSIVE MACRO SMALLPIC ⊂
.TLIN←TNUM←TTLEN←TTIT←NULL;
.RSPIC;
.PICLIN←TLIN; PICNUM←TNUM; PICTLEN←TTLEN; PICTIT←TTIT;
.IF LINES<2*SPREAD-1 THEN NEXT PAGE ⊃

.RECURSIVE MACRO ALLPIC ⊂
.IF PICLIN≠NULL THEN SMALLPIC;;
.IF PICLIN≠NULL THEN BEGIN PLACEPIC; ALLPIC END ⊃

.AT NULL ⊂IF FILLING THEN
.    START BREAK;
.    IF PICLIN≠NULL THEN SMALLPIC;
.    IF LINES<2*SPREAD+1 THEN NEXT PAGE END
.  ELSE SKIP SPREAD⊃;

.BEFORE PAGE ⊂STANDARD TITLES;
.    IF PICLIN≠NULL THEN SMALLPIC ⊃

.END COMMENT PICTURE MACROS;
 



.BOTTOM←50;
.MACRO FULL⊂BOTTOM-3*SPREAD⊃
.MACRO HALF⊂BOTTOM/2-3*SPREAD⊃
.MACRO THIRD⊂BOTTOM/3-3*SPREAD⊃

.SECNAME←NULL
 

.IF XCRIBL THEN FONT 1 "BASL30"
.IF XCRIBL THEN FONT 4 "BASI30"
.IF XCRIBL THEN FONT 5 "BASB30"
.IF XCRIBL THEN FONT 6 "BDR40"
.IF XCRIBL THEN FONT 7 "LPT"

.IF XCRIBL THEN START
.!xgplftmar← 200
.END
.PAGE FRAME 53 HIGH 80 WIDE;
.TITLE AREA HEADING LINES 1 TO 4 CHARS 1 TO 80;
.AREA TEXT LINES 5 TO 53 CHARS 1 TO 80;
.TURN ON "%\"
.TABS 17
.SECID←"CHAPTER";
.SECNAME←NULL
.COUNT PAGE FROM 1 TO 999 PRINTING ⊂PAGE⊃;
.IF XCRIBL THEN SELECT 1 

.NEXT PAGE
.SSECNAME←NULL;
.PORTION TITLEPAGE
.BEGIN NOFILL
.AREA TEXT LINES 1 TO 53 CHARS 1 TO 80
.NEXT PAGE
.GROUP SKIP 1
%1STANFORD ARTIFICIALL INTELLIGENCE LABORATORY →SEPTEMBER 1974
MEMO AIM-243
.GROUP SKIP 2
COMPUTER SCIENCE DEPARTMENT
REPORT CS-456
.GROUP SKIP 4
.NOFILL CENTER
%6HAL, A Programming System for Automation
%5Preliminary Report
.GROUP SKIP 4
%1Raphael Finkel, Russell Taylor, Robert Bolles, Richard Paul, Jerome Feldman		 


.GROUP SKIP 5
.FILL ADJUST COMPACT
.NARROW 8,8
	HAL, a new language for specification of manipulatory actions, is
described.  It is the most recent in a series of efforts in this direction,
a series including, 
in particular, APT and WAVE.  The HAL system includes a source language with
advanced features for describing individual motions of manipulators and
complex series of motions making up an entire assembly, and the runtime
system necessary for execution of programs.
.WIDEN
.NOFILL SKIP TO LINE 42
.FILL
∞_→#
.BREAK
%4This research was supported in part by the
National Science Foundation under contract No. GIα-42906 and in part by
the Advanced Research
Projects Agency of the Office of Defense under Contract No. DAHC-15-73-C-0435

The views and conclusions in this document are those of the authors and 
should not be interpreted as necessarily representing the official policies,
either expressed or implied, of the
funding agencies.

Reproduced in the USA. Available from the National Technical Information
Service, Springfield, Virginia 22151.%*
.END

.ADJUST COMPACT
.SECNAME←NULL
.SSECNAME←NULL
.SSSNUM←NULL
.INSERT CONTENTS
.PORTION BODY;
.COUNT PAGE FROM 1 TO 999 PRINTING ⊂PAGE⊃;
.EVEN HEADING(Page {PAGE!},{SSECNAME},{SSSNUM});
.ODD HEADING({SSSNUM},{SSECNAME},Page {PAGE!});
.NEXT PAGE
.REQUIRE "MINTRO.PUB" SOURCE_FILE; <<MEMO25(2) Introduction>>
.REQUIRE "MGOALS.PUB" SOURCE_FILE; <<MEMO25(3:6) Goals>>
.REQUIRE "MSYSOL.PUB" SOURCE_FILE; <<MEMO25(7) System outline>>
.REQUIRE "MCMPLR.PUB" SOURCE_FILE; <<MEMO61(2) Compiler overview>>
.REQUIRE "MCTRST.PUB" SOURCE_FILE; <<MEMO61(3:7) Control structures>>
.REQUIRE "MDATST.PUB" SOURCE_FILE; <<MEMO61(8:11) Data structures>>
.REQUIRE "MMOTNS.PUB" SOURCE_FILE; <<MEMO61(12:17) Motion specs>>
.REQUIRE "MAFFIX.PUB" SOURCE_FILE; <<MEMO61(18) Affixments>>
.REQUIRE "MGRAPH.PUB" SOURCE_FILE; <<MEMO61(19) Graph structures>>
.REQUIRE "MCTCTS.PUB" SOURCE_FILE; <<MEMO63(2:7) Compile time constructs>>
.REQUIRE "MLIBRT.PUB" SOURCE_FILE; <<MEMO63(8) Library routines>>
.REQUIRE "MVHL.PUB"   SOURCE_FILE; <<MEMO64 Very high level>>
.REQUIRE "MRUNTM.PUB" SOURCE_FILE; <<MEMO7 Runtime overview>>
.REQUIRE "MUSER.PUB"  SOURCE_FILE; <<MEMO8 User features, dialog>>
.REQUIRE "MEXTNS.PUB" SOURCE_FILE; <<MEMO9 Extensions>>
.REQUIRE "MCNCBB.PUB" SOURCE_FILE; <<MEMO10 Conclusions, bibligoraphy>>

.PORTION APPENDIX
.SECID←"APPENDIX";
.SEND CONTENTS ⊂

APPENDICES
.⊃
.COUNT SECTION FROM 1 TO 99 PRINTING  "I";
.COUNT SUBSEC FROM 0 TO 9 IN SECTION PRINTING "!.1";
.COUNT SUBSUBSEC FROM 0 TO 99 IN SUBSEC PRINTING "!.1";
.REQUIRE "MXMPLS.PUB" SOURCE_FILE; <<XMPLES Examples:  appendix>>
.REQUIRE "MTRAPP.PUB" SOURCE_FILE; <<RUNTIM Runtime details:  appendix>>

.PORTION CONTENTS
.COUNT PAGE FROM 2 PRINTING "i";
.SSECNAME←"FOREWORD";
.SSSNUM ← NULL;
.SECNAME←"FOREWORD";
.NEXT PAGE
	This document describes  the new hand  language, HAL.   It is
not intended to be a final language specification or a user's manual.
Rather, it is  a working document;  it presents  a number of  related
ideas concerning a  system for programmable automation.   These ideas
cover  quite a range  of topics: arm servoing,   parallel processing,
assembly world modelling,  strategists, and language design.  We have
tried to combine these into  a coherent system.  However, as you read
this document you  will notice  that some topics  have been  explored
more than others, some explanations contain more details than others,
and  some questions  are left  unanswered.   Various portions  of the
system have already been implemented. The current state of the system
is discussed in an  appendix.  At present HAL is  still somewhat in a
state of  flux; we are presenting these ideas to solicit constructive
suggestions.

	Interested persons unfamiliar with the background for this work
will find it useful to read %4The Use of Sensory Feedback in a 
Programmable Assembly System%* [Bolles].

	We would  like to thank  those people  who have already  made
numerous suggestions  and have helped implement  various parts of the
system.   In particular, we  would to  thank Bertrand  Meyer, who  is
implementing  the   scanner  and  parser,   and  Bo  Eross,   who  is
implementing  the PDP11  runtime monitor.
We would also like to thank Bruce Baumgart, who assisted with the illustrations.


	The English language has no genderless personal pronoun; without
any implication of sexism we use the feminine form in its place.


.SSECNAME←"TABLE OF CONTENTS";
.SECNAME←"TABLE OF CONTENTS";
.NEXT PAGE
.INDENT 0
.NOFILL
.TURN ON "∞→"
CHAPTER →PAGE
.RECEIVE